﻿using System;
using System.Collections.Generic;
using System.Text;
using Exec;

namespace Net
{
    public class Net: IPlugIn
    {
        public static readonly int port = 5432;

        Server serv;

        public void Load()
        {
            Console.WriteLine("!Net 플러그인 초기화");

            serv = new Server();

            Comm.Add(this, "connect", this.Connect);
            Comm.Add(this, "disconnect", this.Disconnect);
            Comm.Add(this, "mediate", this.Mediate);
        }

        public void Unload()
        {
            // 모든 소켓은 종
        }

        public string GetPrefix()
        {
            return "net";
        }

        public string GetInfo()
        {
            return "연결 관리 플러그인";
        }

        // 새로운 소켓을 생성하고 해당 아이피로 접속
        public bool Connect(Transaction tn)
        {
            Client ct = new Client();

            if (ct.Connect(tn.GetPost(1)))
            {
                Val.Add(this, tn.GetPost(0), ct);
                return true;
            }

            return false;
        }

        // 트랜잭션 전달
        public bool Mediate(Transaction tn)
        {
            Client ct = (Client)Val.Ref(this, tn.GetPost(0));

            if (ct == null)
                return false;

            if(!ct.Mediate(tn.GetPost(1).Replace('^', '_').Replace(' ',',')))
                Val.Remove(this, tn.GetPost(0));   

            return true;
        }

        // 접속을 해제한다.
        public bool Disconnect(Transaction tn)
        {
            Client ct = (Client)Val.Ref(this, tn.GetPost(0));

            if (ct == null)
                return false;

            ct.Disconnect();

            Val.Remove(this, tn.GetPost(0));

            return true;
        }
    }
}
